package com.weiiew.recipeservice.service;

import com.weiiew.common.entity.cal.TranslationRecipe;
import com.weiiew.common.entity.cal.calRecipe;
import com.weiiew.common.entity.dto.Recipe;
import com.weiiew.common.entity.simple.DoublePair;
import com.weiiew.common.entity.simple.SimpleBuilding;
import com.weiiew.common.entity.simple.SimpleItem;
import com.weiiew.common.entity.vo.RecipeVO;
import com.weiiew.common.entity.qo.RecipeQo;

import java.util.List;

/**
 * @author 魏锴
 * @description 针对表【recipe】的数据库操作Service
 * @createDate 2024-01-28 01:49:55
 */
public interface RecipeService {
    /**
     * 新建配方信息
     *
     * @param recipe  配方信息
     * @param id
     * @param version
     */
    void createRecipe(Recipe recipe, Long id, Integer version) throws Exception;

    /**
     * 更新配方信息
     *
     * @param recipe  配方信息
     * @param id
     * @param version
     */
    void modifyRecipe(Recipe recipe, Long id, Integer version) throws Exception;

    /**
     * 获取配方列表
     *
     * @param qo 配方查询条件
     * @return 配方信息
     */
    List<RecipeVO> getRecipeList(RecipeQo qo) throws Exception;

    Integer getRecipeLength(RecipeQo qo);

    /**
     * 根据id删除配方
     *
     * @param id      配方id
     * @param version 版本号
     * @return 删除是否成功
     */

    boolean removeRecipe(Integer id, Integer version);


    List<SimpleItem> getItemListSortByProduct(Integer version);

    List<SimpleItem> getItemListSortByIngredient(Integer version);

    List<SimpleBuilding> getBuildListSortByProduct(Integer version);

    List<RecipeVO> getRecipeByBuildingId(Integer id);
    /**
     * 根据物品id获取以该物品为原料的配方
     *
     * @param item 物品id
     * @return 配方列表
     */
    List<RecipeVO> getRecipeByIngredientId(Integer item);

    /**
     * 根据物品id获取以该物品为产物的配方
     *
     * @param item 物品id
     * @return 配方列表
     */
    List<RecipeVO> getRecipeByProductId(Integer item);

    List<calRecipe> getCalRecipeByItem(Integer version, Integer item);

    List<DoublePair> getFactoryRecipeById(Integer item, Integer id);

    TranslationRecipe getTranslationRecipe(int item, int recipe);
    RecipeVO getRecipeVOById(Integer id);
}
